草庐IT

c++ - NULL == 指针

全部标签

c# - 为什么 SortedList<TKey, TValue> 不对值使用指针?

所以我正在查看SortedList的实现和执行Add(调用Insert如下所示)真的让我感到惊讶。Add方法进行明显的二进制搜索以确定KVP应该去的索引,但是Insert似乎它可以显着改进(当然是在更大的范围内):privatevoidInsert(intindex,TKeykey,TValuevalue){if(this._size==this.keys.Length)this.EnsureCapacity(this._size+1);if(index如果我没看错,我保留随时犯错的权利,这是一个O(2n)操作。在我看来,值应该用指针来实现。有点像LinkedList与key的值有关,

c# - 如何制作从 C# "Thread-safe"调用的 C (P/invoke) 代码

我有一些使用单个全局变量的简单C代码。显然这不是线程安全的,所以当我在C#中使用P/invoke从多个线程调用它时,事情就搞砸了。如何为每个线程单独导入此函数,或使其成为线程安全的?我尝试声明变量__declspec(thread),但这导致程序崩溃。我还尝试制作一个C++/CLI类,但它不允许成员函数是__declspec(naked),我需要(我正在使用内联汇编)。我在编写多线程C++代码方面经验不足,因此可能缺少某些内容。下面是一些示例代码:C#[DllImport("MyDll.dll",CallingConvention=CallingConvention.Cdecl)]pu

c# - 什么时候应该防范null?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我什么时候应该防止null参数?理想情况下,我会在任何地方都防止null,但这会变得非常臃肿和乏味。我还注意到人们并没有在AsyncCallback之类的东西中设置guard。为了避免使用大量单调的代码烦扰其他人,是否有关于我应该在何处防范null的公认标准?谢谢。

c# - 用户 : (null) 授权失败

我正在为不使用Identity的ASP.NETMVCCore使用自定义身份验证。这是Startup.cs:publicclassStartup{publicIConfigurationConfiguration{get;set;}//ConfigureIoCcontainer//https://docs.asp.net/en/latest/fundamentals/dependency-injection.htmlpublicvoidConfigureServices(IServiceCollectionservices){services.Configure(options=>Con

c# - 随机整数中最可能的位

我做过这样的实验——用C和C#制作了1000万个随机数。然后统计随机整数中15位中的每一位被设置了多少次。(我选择15位是因为C只支持最大0x7fff的随机整数)。我得到的是:我有两个问题:为什么有3个最可能的位?在C情况下,位8,10,12是最有可能的。和C#位6,8,11最有可能。与C#最可能位相比,C#最可能位也似乎大部分移动了2个位置。为什么是这样?因为C#使用其他RAND_MAX常量还是什么?我的C测试代码:voidaccumulateResults(intrandom,intbitSet[15]){inti;intisBitSet;for(i=0;iC#的测试代码:stat

C#:声明函数永远不会返回 null?

背景:有一个开发者原则“如果请求的项不存在,我的函数应该返回null还是抛出异常?”我不想在这里讨论。我决定为所有必须返回值的情况抛出异常,并且只有在(编程或逻辑上)无效请求的情况下,该值才会不存在。最后是我的问题:我可以标记一个函数,以便编译器知道它永远不会返回null并警告任何检查返回值是否为null的人吗? 最佳答案 您可以使用CodeContracts执行此操作.示例:publicStringMethod1(){Contract.Ensures(Contract.Result()!=null);//Todo}

c# - 为什么 using(null) 在 C# 中是一个有效的案例?

有人可以向我解释为什么下面显示的代码在C#中有效并执行对Console.WriteLine的调用吗?using(null){Console.WriteLine("somethingishere")}它编译成(最后显示block)。如您所见,编译器决定不执行Dispose()方法并跳转到endfinally指令。IL_0013:ldnullIL_0014:ceqIL_0016:stloc.1IL_0017:ldloc.1IL_0018:brtrue.sIL_0021//brancheshereanddecidenottoexecuteDispose()IL_001a:ldnullIL_0

c# - C DLL 中的 PInvoke char* 在 C# 中处理为字符串。空字符问题

CDLL中的函数如下所示:intmy_Funct(char*input,char*output);我必须从C#应用程序调用它。我通过以下方式执行此操作:...DllImportstuff...publicstaticexternintmy_Funct(stringinput,stringoutput);输入字符串完美地传输到DLL(我有可见的证据)。该函数填写的输出虽然是错误的。我有hexa数据,比如:3F-D9-00-01但不幸的是,两个零之后的所有内容都被截断了,只有前两个字节进入了我的C#应用程序。它发生了,因为(我猜)它被视为空字符并将其作为字符串的结尾。知道如何摆脱它吗?我试

c# - 字段 xxx 从未分配给,并且始终具有默认值 null

有人知道这是什么问题吗?我在privatestaticQuantizerquantit;上收到此警告Fieldxxxisneverassignedto,andwillalwayshaveitsdefaultvaluenull我不知道该怎么做才能修复,因为当我尝试使用quantit.Quantize()时debug说:“对象引用未设置到对象的实例。”并指向au=quantit.Quantize();代码:publicclassQuantization:System.Windows.Forms.Form{privatestaticQuantizerquantit;privateButton

c# - 返回指向类型参数的不安全指针

我正在尝试定义一个返回指向泛型类型参数的指针的属性,如下所示:publicclassMemWrapperwhereT:struct{readonlyIntPtrpointerToUnmanagedHeapMem;//...dosomememorymanagementalso...publicunsafeT*Ptr{get{return(T*)(pointerToUnmanagedHeapMem);}}}编译器提示无法声明指向托管类型T的指针或获取其地址或大小(CS0208)。奇怪的是,如果我用一个具体的结构手动替换泛型类型参数,那就是publicclassMyStructMemWrap